﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.Common;
using Microsoft.Practices.EnterpriseLibrary.Data.Sql;
using Microsoft.Practices.EnterpriseLibrary.Common;
using System.Configuration;
using Insifo.BE;
using Insifo.BE.Gen;

namespace Insifo.DL.Gen
{
    public class DLTipoCambioMensual : DLTransaction, IDLTransaccion<BETipoCambioMensual>
    {
        #region  Members


        /// <summary>
        /// Método obtiene obtiene la Lista de Niveles
        /// </summary>
        /// <returns>Devuelve un DataSet</returns>
        public DataSet Listar(BETipoCambioMensual pbe)
        {
            DataSet ds = new DataSet();
            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_GEN_TipoCambioMensual_Listar");
            try
            {
                dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;
                sqlDB.AddInParameter(dbCmd, "@as_Periodo", DbType.String, pbe.Periodo);
                sqlDB.AddInParameter(dbCmd, "@ai_IdMonedaOrigen", DbType.Int32, pbe.IdMonedaOrigen);
                sqlDB.AddInParameter(dbCmd, "@ai_IdMonedaDestino", DbType.Int32, pbe.IdMonedaDestino);
                sqlDB.AddInParameter(dbCmd, "@as_Estado", DbType.String, pbe.Estado);
                sqlDB.AddInParameter(dbCmd, "@ai_Pagina", DbType.Int32, pbe.Pagina);
                ds = sqlDB.ExecuteDataSet(dbCmd);
            }
            catch (Exception)
            {
                throw;
            }
            finally
            {
                dbCmd.Dispose();
            }
            return ds;
        }


        /// <summary>
        /// Método obtiene Datos del Usuario
        /// </summary>
        /// <returns>Devuelve un DataSet</returns>
        /// 
        public BETipoCambioMensual Obtener(BETipoCambioMensual pbe)
        {
            BETipoCambioMensual be = new BETipoCambioMensual();
            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_GEN_TipoCambioMensual_Obtener");
            try
            {
                dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;
                sqlDB.AddInParameter(dbCmd, "@ai_IdMonedaOrigen", DbType.Int32, pbe.IdMonedaOrigen);
                sqlDB.AddInParameter(dbCmd, "@ai_IdMonedaDestino", DbType.Int32, pbe.IdMonedaDestino);
                sqlDB.AddInParameter(dbCmd, "@as_Periodo", DbType.String, pbe.Periodo);

                using (IDataReader reader = sqlDB.ExecuteReader(dbCmd))
                {
                    while (reader.Read())
                    {
                        be.IdMonedaOrigen = DBValue.Get<int>(reader, "IdMonedaOrigen");
                        be.IdMonedaDestino = DBValue.Get<int>(reader, "IdMonedaDestino");
                        be.Periodo = DBValue.Get<String>(reader, "Periodo");
                        be.ValorCompra = DBValue.Get<Decimal>(reader, "ValorCompra");
                        be.ValorVenta = DBValue.Get<Decimal>(reader, "ValorVenta");
                        be.ValorMayorizar = DBValue.Get<Decimal>(reader, "ValorMayorizar");
                        be.ValorSBSOperaciones = DBValue.Get<Decimal>(reader, "ValorSBSOperaciones");
                        be.IndiceAjuste = DBValue.Get<Decimal>(reader, "IndiceAjuste");
                        be.IndiceAcumAjuste = DBValue.Get<Decimal>(reader, "IndiceAcumAjuste");
                        be.FactorAjuste = DBValue.Get<Decimal>(reader, "FactorAjuste");
                        be.ValorROF = DBValue.Get<Decimal>(reader, "ValorROF");
                        be.PIB = DBValue.Get<Decimal>(reader, "PIB");
                        be.UIT = DBValue.Get<Decimal>(reader, "UIT");
                        be.Inflacion = DBValue.Get<Decimal>(reader, "Inflacion");

                        be.Estado = DBValue.Get<String>(reader, "Estado");
                        be.UsuarioModificacion = DBValue.Get<String>(reader, "UsuarioModificacion");
                        be.FechaModificacion = DBValue.Get<DateTime>(reader, "FechaModificacion");
                        be.UsuarioCreacion = DBValue.Get<String>(reader, "UsuarioCreacion");
                        be.FechaCreacion = DBValue.Get<DateTime>(reader, "FechaCreacion");
                        break;
                    }
                }
            }
            catch (Exception e)
            {
                throw e;
            }

            finally
            {
                dbCmd.Dispose();
            }
            return be;
        }



        /// <summary>
        /// Método Inserta un Nivel Alerta
        /// </summary>
        /// <returns>Devuelve una entidad</returns>
        public BETipoCambioMensual Insertar(BETipoCambioMensual pbe)
        {
            BETipoCambioMensual be = new BETipoCambioMensual();
            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_GEN_TipoCambioMensual_Insertar");

            try
            {
                dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;

                sqlDB.AddInParameter(dbCmd, "@ai_IdMonedaOrigen", DbType.Int32, pbe.IdMonedaOrigen);
                sqlDB.AddInParameter(dbCmd, "@ai_IdMonedaDestino", DbType.Int32, pbe.IdMonedaDestino);
                sqlDB.AddInParameter(dbCmd, "@as_Periodo", DbType.String, pbe.Periodo);
                sqlDB.AddInParameter(dbCmd, "@ad_ValorCompra", DbType.Decimal, pbe.ValorCompra);
                sqlDB.AddInParameter(dbCmd, "@ad_ValorVenta", DbType.Decimal, pbe.ValorVenta);
                sqlDB.AddInParameter(dbCmd, "@ad_ValorMayorizar", DbType.Decimal, pbe.ValorMayorizar);
                sqlDB.AddInParameter(dbCmd, "@ad_ValorSBSOperaciones", DbType.Decimal, pbe.ValorSBSOperaciones);
                sqlDB.AddInParameter(dbCmd, "@ad_IndiceAjuste", DbType.Decimal, pbe.IndiceAjuste);
                sqlDB.AddInParameter(dbCmd, "@ad_IndiceAcumAjuste", DbType.Decimal, pbe.IndiceAcumAjuste);
                sqlDB.AddInParameter(dbCmd, "@ad_FactorAjuste", DbType.Decimal, pbe.FactorAjuste);
                sqlDB.AddInParameter(dbCmd, "@ad_ValorROF", DbType.Decimal, pbe.ValorROF);
                sqlDB.AddInParameter(dbCmd, "@ad_PIB", DbType.Decimal, pbe.PIB);
                sqlDB.AddInParameter(dbCmd, "@ad_UIT", DbType.Decimal, pbe.UIT);
                sqlDB.AddInParameter(dbCmd, "@ad_Inflacion", DbType.Decimal, pbe.Inflacion);
                sqlDB.AddInParameter(dbCmd, "@as_Estado", DbType.String, pbe.Estado);
                sqlDB.AddInParameter(dbCmd, "@as_UsuarioCreacion", DbType.String, pbe.UsuarioCreacion);
                sqlDB.AddInParameter(dbCmd, "@adt_FechaCreacion", DbType.DateTime, pbe.FechaCreacion);
                //sqlDB.AddInParameter(dbCmd, "@as_UsuarioModificacion", DbType.String, pbe.UsuarioModificacion);
                //sqlDB.AddInParameter(dbCmd, "@adt_FechaModificacion", DbType.DateTime, pbe.FechaModificacion);

                using (IDataReader reader = sqlDB.ExecuteReader(dbCmd))
                {
                    while (reader.Read())
                    {
                        be.Id = DBValue.Get<int>(reader, "Id");
                        be.FechaCreacion = DBValue.Get<DateTime>(reader, "FechaCreacion");
                        //Error
                        be.Error = DBValue.Get<Int32>(reader, "CodigoError");
                        be.Mensaje = DBValue.Get<String>(reader, "MensajeError");
                        break;
                    }
                }
            }
            catch (Exception e)
            {
                throw e;
            }

            finally
            {
                dbCmd.Dispose();
            }
            return be;
        }


        /// <summary>
        /// Método Actualiza un Nivel Alerta
        /// </summary>
        /// <returns>Devuelve una entidad</returns>
        public BETipoCambioMensual Actualizar(BETipoCambioMensual pbe)
        {
            BETipoCambioMensual be = new BETipoCambioMensual();
            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_GEN_TipoCambioMensual_Actualizar");

            try
            {
                dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;

                sqlDB.AddInParameter(dbCmd, "@ai_IdMonedaOrigen", DbType.Int32, pbe.IdMonedaOrigen);
                sqlDB.AddInParameter(dbCmd, "@ai_IdMonedaDestino", DbType.Int32, pbe.IdMonedaDestino);
                sqlDB.AddInParameter(dbCmd, "@as_Periodo", DbType.String, pbe.Periodo);
                sqlDB.AddInParameter(dbCmd, "@ad_ValorCompra", DbType.Decimal, pbe.ValorCompra);
                sqlDB.AddInParameter(dbCmd, "@ad_ValorVenta", DbType.Decimal, pbe.ValorVenta);
                sqlDB.AddInParameter(dbCmd, "@ad_ValorMayorizar", DbType.Decimal, pbe.ValorMayorizar);
                sqlDB.AddInParameter(dbCmd, "@ad_ValorSBSOperaciones", DbType.Decimal, pbe.ValorSBSOperaciones);
                sqlDB.AddInParameter(dbCmd, "@ad_IndiceAjuste", DbType.Decimal, pbe.IndiceAjuste);
                sqlDB.AddInParameter(dbCmd, "@ad_IndiceAcumAjuste", DbType.Decimal, pbe.IndiceAcumAjuste);
                sqlDB.AddInParameter(dbCmd, "@ad_FactorAjuste", DbType.Decimal, pbe.FactorAjuste);
                sqlDB.AddInParameter(dbCmd, "@ad_ValorROF", DbType.Decimal, pbe.ValorROF);
                sqlDB.AddInParameter(dbCmd, "@ad_PIB", DbType.Decimal, pbe.PIB);
                sqlDB.AddInParameter(dbCmd, "@ad_UIT", DbType.Decimal, pbe.UIT);
                sqlDB.AddInParameter(dbCmd, "@ad_Inflacion", DbType.Decimal, pbe.Inflacion);
                sqlDB.AddInParameter(dbCmd, "@as_Estado", DbType.String, pbe.Estado);
                //sqlDB.AddInParameter(dbCmd, "@as_UsuarioCreacion", DbType.String, pbe.UsuarioCreacion);
                //sqlDB.AddInParameter(dbCmd, "@adt_FechaCreacion", DbType.DateTime, pbe.FechaCreacion);
                sqlDB.AddInParameter(dbCmd, "@as_UsuarioModificacion", DbType.String, pbe.UsuarioModificacion);
                sqlDB.AddInParameter(dbCmd, "@adt_FechaModificacion", DbType.DateTime, pbe.FechaModificacion);

                using (IDataReader reader = sqlDB.ExecuteReader(dbCmd))
                {
                    while (reader.Read())
                    {
                        be.Id = DBValue.Get<Int32>(reader, "Id");
                        be.FechaModificacion = DBValue.Get<DateTime>(reader, "FechaModificacion");
                        //Error
                        be.Error = DBValue.Get<Int32>(reader, "CodigoError");
                        be.Mensaje = DBValue.Get<String>(reader, "MensajeError");
                        break;
                    }
                }
            }
            catch (Exception e)
            {
                throw e;
            }

            finally
            {
                dbCmd.Dispose();
            }
            return be;
        }


        /// <summary>
        /// Método Actualiza el Estado Nivel Alerta
        /// </summary>
        /// <returns>Devuelve una entidad</returns>
        public BETipoCambioMensual Eliminar(BETipoCambioMensual pbe)
        {
            BETipoCambioMensual be = new BETipoCambioMensual();
            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_GEN_TipoCambioMensual_Eliminar");

            try
            {
                dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;

                sqlDB.AddInParameter(dbCmd, "@ai_IdMonedaOrigen", DbType.Int32, pbe.IdMonedaOrigen);
                sqlDB.AddInParameter(dbCmd, "@ai_IdMonedaDestino", DbType.Int32, pbe.IdMonedaDestino);
                sqlDB.AddInParameter(dbCmd, "@as_Periodo", DbType.String, pbe.Periodo);
                sqlDB.AddInParameter(dbCmd, "@as_Estado", DbType.String, pbe.Estado);
                sqlDB.AddInParameter(dbCmd, "@as_UsuarioModificacion", DbType.String, pbe.UsuarioModificacion);
                sqlDB.AddInParameter(dbCmd, "@adt_FechaModificacion", DbType.DateTime, pbe.FechaModificacion);

                using (IDataReader reader = sqlDB.ExecuteReader(dbCmd))
                {
                    while (reader.Read())
                    {
                        be.Id = DBValue.Get<Int32>(reader, "Id");
                        be.FechaModificacion = DBValue.Get<DateTime>(reader, "FechaModificacion");
                        //Error
                        be.Error = DBValue.Get<Int32>(reader, "CodigoError");
                        be.Mensaje = DBValue.Get<String>(reader, "MensajeError");
                        break;
                    }
                }
            }
            catch (Exception e)
            {
                throw e;
            }

            finally
            {
                dbCmd.Dispose();
            }
            return be;
        }

        #endregion  Members
    }
}
